package com.pay.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MD5Util {
		private static String ALGORITHM_MD5 = "MD5";
    /**
     * 将内容转为md5加密返回
     * @param srcTxt
     * @return
     * @throws NoSuchAlgorithmException
     * @throws NullPointerException
     */
		public static String getMD5(String srcTxt) throws NoSuchAlgorithmException,
				NullPointerException {
			if (srcTxt == null) {
				throw new NullPointerException("输入参数为 NULL!");
			}

			String result = "";

			MessageDigest digest = MessageDigest.getInstance(ALGORITHM_MD5);
			digest.update(srcTxt.getBytes());
			byte[] byteRes = digest.digest();

			int length = byteRes.length;

			for (int i = 0; i < length; ++i) {
				result = result + byteHEX(byteRes[i]);
			}

			return result;
		}

		private static String byteHEX(byte ib) {
			char[] DigitNormal = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
					'9', 'a', 'b', 'c', 'd', 'e', 'f' };

			char[] ob = new char[2];

			ob[0] = DigitNormal[(ib >>> 4 & 0xF)];

			ob[1] = DigitNormal[(ib & 0xF)];

			return new String(ob);
		}

		public static String getMD5byBase64(String input) {
			String result = null;
			byte[] byteRes = (byte[]) null;
			try {
				MessageDigest digest = MessageDigest.getInstance(ALGORITHM_MD5);
				digest.update(input.getBytes());
				byteRes = digest.digest();
			} catch (NoSuchAlgorithmException ex) {
				System.err.println(ex.getMessage());
			}

			result = Base64.encode(byteRes);

			return result;
		}


	private static String byteArrayToHexString(byte b[]) {
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++)
			resultSb.append(byteToHexString(b[i]));

		return resultSb.toString();
	}

	private static String byteToHexString(byte b) {
		int n = b;
		if (n < 0)
			n += 256;
		int d1 = n / 16;
		int d2 = n % 16;
		return hexDigits[d1] + hexDigits[d2];
	}

	public static String MD5Encode(String origin, String charsetname) {
		String resultString = null;
		try {
			resultString = new String(origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			if (charsetname == null || "".equals(charsetname))
				resultString = byteArrayToHexString(md.digest(resultString
						.getBytes()));
			else
				resultString = byteArrayToHexString(md.digest(resultString
						.getBytes(charsetname)));
		} catch (Exception exception) {
		}
		return resultString;
	}

	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

	public static void main(String[] args) {
		try {

			System.out.println(MD5Util.getMD5("123456"));
		}catch (Exception e){

		}
	}
}
